package com.hnit.applet.common.exception;

import com.hnit.applet.common.enums.ResponseStatus;
import lombok.Getter;

/**
 * 运行时异常类
 *
 * @author zwj
 */
public class AppRuntimeException extends RuntimeException {

    /**
     * Http状态码
     */
    @Getter
    private int statusCode = ResponseStatus.INVALID_REQUEST.value();

    /**
     * 错误编码
     */
    @Getter
    private String code;

    /**
     * 构造一个基本异常
     *
     * @param message 信息描述
     */
    public AppRuntimeException(String message) {
        super(message);
    }

    /**
     * 构造一个基本异常
     *
     * @param statusCode Http状态码
     * @param message    信息描述
     */
    public AppRuntimeException(int statusCode, String message) {
        super(message);
        this.statusCode = statusCode;
    }

    /**
     * 构造一个基本异常
     *
     * @param message 信息描述
     * @param cause   根异常类（可以存入任何异常）
     */
    public AppRuntimeException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 构造一个基本异常
     *
     * @param statusCode Http状态码
     * @param message    信息描述
     * @param cause      根异常类（可以存入任何异常）
     */
    public AppRuntimeException(int statusCode, String message, Throwable cause) {
        super(message, cause);
        this.statusCode = statusCode;
    }

    /**
     * 构造一个基本异常
     *
     * @param code    错误编码
     * @param message 信息描述
     */
    public AppRuntimeException(String code, String message) {
        super(message);
        this.code = code;
    }

    /**
     * 构造一个基本异常
     *
     * @param statusCode Http状态码
     * @param code       错误编码
     * @param message    信息描述
     */
    public AppRuntimeException(int statusCode, String code, String message) {
        super(message);
        this.code = code;
        this.statusCode = statusCode;
    }

    /**
     * 构造一个基本异常
     *
     * @param code    错误编码
     * @param message 信息描述
     * @param cause   根异常类（可以存入任何异常）
     */
    public AppRuntimeException(String code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    /**
     * 构造一个基本异常
     *
     * @param statusCode Http状态码
     * @param code       错误编码
     * @param message    信息描述
     * @param cause      根异常类（可以存入任何异常）
     */
    public AppRuntimeException(int statusCode, String code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
        this.statusCode = statusCode;
    }
}
